﻿using FluentScheduler;
using FScheduler.Job;

namespace FScheduler
{
    /// <summary>
    /// Fluent不同于Quartz，用JobManager来做全局管理
    /// PS:单独做成一个程序集，为了将组件独立开；而且不同于CacheBll,这里的服务几乎只会在程序开始时调用一次，所以不用添加到BLLSession中去
    /// </summary>
    public class FluentBll
    {
        private static Registry registry;

        static FluentBll()
        {
            //首先创建一个注册机(一个注册机可以注册多个调度器)
            registry = new Registry();
        }

        /// <summary>
        /// 开始所有作业
        /// </summary>
        public static bool Start()
        {
            //注册机注册一个“调度器-job-触发器”（注册机和调度器一对多关系，调度器和作业一对一关系）
            registry.Schedule(new ClearUselessCacheFile())
                .WithName("job1")
                .ToRunNow()
                .AndEvery(2)//间隔15分钟，IIS应用程序池默认是20分钟回收一次
                .Seconds();

            //作业管理器通过注册机初始化并执行所有注册机注册的“调度器-job-触发器”
            JobManager.Initialize(registry);
            return true;
        }

        /// <summary>
        /// 结束所有作业
        /// </summary>
        public static bool Stop()
        {
            JobManager.RemoveJob("job1");
            return true;
        }

        /// <summary>
        /// 暂停所有作业
        /// </summary>
        public static bool PauseAll()
        {
            JobManager.Stop();
            return true;
        }

        /// <summary>
        /// 继续所有
        /// </summary>
        public static bool ContinueAll()
        {
            JobManager.Start();
            return true;
        }
    }
}
